package gu.sql2java.excel.aspect.spring;

/**
 * 服务返回值返回值解析接口
 * @author guyadong
 *
 */
public interface ReturnValueParser {
	/**
	 * 返回当前实现可处理的返回值类型
	 */
	Class<?> getReturnType();

	/**
	 * 解析输出的对象,根据输入的返回值和调用方法对象解析实际的返回值和类型和代理方法
	 * @param input
	 * @throws Exception
	 */
	ReturnInfo parse(ReturnInfo input) throws Exception;

	/**
	 * 当前端请求返回的不是excel输出数据而是获取相关的参数时的处理<br>
	 * {@code returnValue}可能为{@code null}
	 * @param returnValue 调用服务方法获取的返回值
	 * @param parameterValue
	 */
	Object onGetParameter(Object returnValue, Object parameterValue);
	
	/**
	 * 处理切面执行异常
	 * @param returnValue
	 * @param e
	 * @throws Exception
	 */
	void onError(Object returnValue, Exception e) throws Exception;

	/**
	 * 返回{@code returnValue}是否为成功调用
	 * @param returnValue
	 */
	boolean isSuccess(Object returnValue);
}
